﻿using System;
using System.Collections.Generic;
using System.Text;

namespace WPFCABShell.$safeprojectname$.Services.Options
{
	/// <summary>
	/// Provides services related to application options.
	/// </summary>
	/// <remarks>
	/// <para>
	/// The options service allows modules to register their own options pane in the application options window.
	/// </para>
	/// </remarks>
	public interface IOptionsService
	{
		/// <summary>
		/// Registers options.
		/// </summary>
		/// <param name="targetSiteName">
		/// The target site for the options.
		/// </param>
		/// <param name="name">
		/// The name of the options.
		/// </param>
		/// <param name="paneType">
		/// A type implementing <see cref="IOptionsPane"/> that will be used to allow editing of the options.
		/// </param>
		/// <param name="siteName">
		/// An optional site name under which to register the new options.
		/// </param>
		/// <returns>
		/// An implementation of <see cref="IOptions"/> representing the options.
		/// </returns>
		IOptions Register(string targetSiteName, string name, Type paneType, string siteName);

		/// <summary>
		/// Unregisters options.
		/// </summary>
		/// <param name="options">
		/// The options to unregister.
		/// </param>
		void Unregister(IOptions options);
	}
}
